package com.by.wx.model.msg;

import cn.hutool.core.util.ObjUtil;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

/**
 * @Author 陈子杰
 * @Description
 * @Version 1.0.0
 * @Date 2024/12/19 23:45
 */
@Data
public class MessageDto {
    /**
     * 消息类型
     */
    @JsonProperty("TypeName")
    private String typeName;
    /**
     * 设备ID
     */
    @JsonProperty("Appid")
    private String appId;
    /**
     * 所属微信的wxid
     */
    @JsonProperty("Wxid")
    private String wxid;
    @JsonProperty("Data")
    private MessageData data;

    private String content;

    /**
     * 获取发送人的ID
     * @return {@link String }
     */
    public String getSenderId() {
        if (ObjUtil.isEmpty(data)) {
            return null;
        }
        String value = data.content.getValue();
        String[] lines = value.split("\n");
        if (lines.length > 0) {
            String firstLine = lines[0];
            if (firstLine.endsWith(":")) {
                return firstLine.substring(0, firstLine.length() - 1);
            }
        }
        return null;
    }

    /**
     * 获取消息接收人的wxid
     *
     * @return {@link String }
     */
    public String getToWxId() {
        WxidWrapper toUserName = data.getToUserName();
        return toUserName.getWxid();
    }

    /**
     * 获取消息发送人的wxid
     *
     * @return {@link String }
     */
    public String getFromWxId() {
        WxidWrapper fromUserName = data.getFromUserName();
        return fromUserName.getWxid();
    }

    /**
     * 消息类型
     *
     * @return {@link Integer }
     * 1：文本消息
     */
    public Integer getMsgType() {
        return data.getMsgType();
    }

    /**
     * 获取消息内容
     *
     * @return {@link Integer }
     * 1：文本消息
     */
    public String getContent() {
        return data.content.getValue();
    }

    @Data
    static class MessageData {
        @JsonProperty("MsgId")
        private long msgId;
        /**
         * 消息发送人的wxid
         */
        @JsonProperty("FromUserName")
        private WxidWrapper fromUserName;
        /**
         * 消息接收人的wxid
         */
        @JsonProperty("ToUserName")
        private WxidWrapper toUserName;
        @JsonProperty("MsgType")
        private int msgType;
        /**
         * 消息内容
         */
        @JsonProperty("Content")
        private StringWrapper content;
        @JsonProperty("Status")
        private int status;
        @JsonProperty("ImgStatus")
        private int imgStatus;
        @JsonProperty("ImgBuf")
        private ImgBuf imgBuf;
        /**
         * 消息发送时间
         * 秒
         */
        @JsonProperty("CreateTime")
        private long createTime;
        @JsonProperty("MsgSource")
        private String msgSource;
        @JsonProperty("PushContent")
        private String pushContent;
        @JsonProperty("NewMsgId")
        private long newMsgId;
        @JsonProperty("MsgSeq")
        private long msgSeq;
    }

    @Data
    static class WxidWrapper {
        @JsonProperty("string")
        private String wxid;
    }

    @Data
    static class StringWrapper {
        @JsonProperty("string")
        private String value;
    }

    @Data
    static class ImgBuf {
        @JsonProperty("iLen")
        private int length;
    }
}
